package ar.unsam.tp.solicitudes

import ar.unsam.tp.excepciones.JugadorNoJuegaException
import ar.unsam.tp.programa.Administrador
import ar.unsam.tp.programa.Calificacion
import ar.unsam.tp.programa.Equipo
import ar.unsam.tp.programa.Jugador
import java.util.ArrayList
import java.util.List

class SolicitudCalificacion implements Solicitud {
	@Property Calificacion calificacion
	@Property List<Equipo> equiposPartido = new ArrayList<Equipo>
	@Property Administrador solicitante

	new(Calificacion cal) {
		this.calificacion = cal
	}

	new(Calificacion cal, Equipo equipo) {
		this.calificacion = cal
		this.equiposPartido.add(equipo)
	}

	new(Calificacion cal, List<Equipo> equipos) {
		this.calificacion = cal
		this.equiposPartido = equipos
	}
	
	override void aceptar() {
		checkearCalificacionPorEquipos(this.calificacion)
		calificacion.aceptar
	}

	override void rechazar(String motivo) {
		checkearCalificacionPorEquipos(this.calificacion)
		calificacion.rechazar(motivo)
	}

	def private checkearCalificacionPorEquipos(Calificacion calificacion) {
		checkearJugadorAnotado(this.calificacion.jugadorCalificado)
		checkearJugadorAnotado(this.calificacion.jugadorCalificador)
	}

	def private checkearJugadorAnotado(Jugador jugador) {
		for (Equipo eqiupo : equiposPartido){
			if(eqiupo.formacionFinal.contains(jugador))
				return
		} 

		throw new JugadorNoJuegaException("El jugador no participo del partido")
	}

}
